package com.yuandian.customer.perception.service;

import com.yuandian.api.customer_perception.po.OperatorOverviewParams;
import com.yuandian.api.customer_perception.vo.*;
import com.yuandian.po.MultipleTableInfo;
import com.yuandian.utils.PageDataInfo;

import java.util.List;

/**
 * <p>
 * 操作员监控总览service
 * <p>
 *
 * @author lijunhang
 * @date 2021/8/16
 * @since 1.0.0
 */
public interface IOperatorOverviewService {

    /**
     * 操作员总览列表
     *
     * @param params 请求参数
     * @param tableInfos 表名 表信息
     * @return 操作员总览列表数据
     */
    PageDataInfo operatorOverviewList(OperatorOverviewParams params, List<MultipleTableInfo> tableInfos);

    /**
     * 操作员总览列表下载
     *
     * @param params 请求参数
     * @param tableInfos 表名 表信息
     * @return 操作员总览列表数据
     */
    List<OperatorOverviewVo> operatorOverviewListExport(OperatorOverviewParams params, List<MultipleTableInfo> tableInfos);

    /**
     * 查询指定地区下的营业厅
     *
     * @param params 请求参数
     * @return 查询指定地区下的营业厅列表
     */
    List<SearchOptionVo> queryBusinessHall(OperatorOverviewParams params);

    /**
     * 查询指定地区下的营业厅
     *
     * @param params 请求参数
     * @return 查询指定地区下的营业厅列表
     */
    PageDataInfo queryBusinessHall2(OperatorOverviewParams params);

    /**
     * 查询操作员当前在线人数
     *
     * @param params 请求参数
     * @param tableInfos 表名
     * @return 查询操作员当前在线人数
     */
    int operatorOnlineNum(OperatorOverviewParams params, List<MultipleTableInfo> tableInfos);


    /**
     * 操作员受理量top5
     *
     * @param params 请求参数
     * @param tableInfos 表名
     * @return 操作员受理量top5数据
     */
    List<OperatorCompleteTopVo> operatorCompleteTop5(OperatorOverviewParams params, List<String> operatorIds, List<MultipleTableInfo> tableInfos);


    /**
     * 人工操作平均耗时Top5
     * @param params 请求参数
     * @param tableInfos 表名
     * @return 人工操作平均耗时Top5数据
     */
    List<OperatorCompleteTimeTopVo> operatorCompleteTimeTop5(OperatorOverviewParams params, List<MultipleTableInfo> tableInfos);

    /**
     * 操作员活跃数量
     * @param params 请求参数
     * @param tableInfos 表名
     * @return 操作员活跃数量数据
     */
    List<OperatorActiveCountVo> operatorActiveCount(OperatorOverviewParams params, List<MultipleTableInfo> tableInfos);


    /**
     * 操作员违规告警提示列表下载
     * @param params 请求参数
     * @return 操作员违规告警提示列表数据
     */
    List<OperatorViolationVo> operatorViolationListExport(OperatorOverviewParams params);

    /**
     * 查询指定业务员近一月的违规业务最多的业务名称
     * @param params 请求参数
     * @return 指定业务员近一月的违规业务最多的业务名称
     */
    List<OperatorViolationVo> operatorBusinessName(OperatorOverviewParams params,List<String> operators);

    /**
     * 操作员总览-回填指定用户最近上线时间
     * @param params
     * @param operators
     * @param tableInfos 表名
     * @return
     */
    List<OperatorViolationVo> queryOnlineTimeByOperatorId(OperatorOverviewParams params, List<String> operators, List<MultipleTableInfo> tableInfos);
}
